package com.minimalist.lindi.mapper;

import com.minimalist.common.entity.lindi.po.LindiEnterpriseAccount;

import com.minimalist.common.entity.lindi.vo.enterpriseaccount.LindiEnterpriseAccountQueryVO;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;

import java.util.List;

/**
 * 林地指标交易平台_企业用户表 映射层。
 *
 * @author 11987
 * @since 2025-03-31
 */
public interface LindiEnterpriseAccountMapper extends BaseMapper<LindiEnterpriseAccount>{

    /**
     * 根据企业名称查询企业用户信息
     *
     * @param enterpriseName      企业名称
     * @param enterpriseAccountId 企业账户ID
     * @return 企业用户信息
     */
    default LindiEnterpriseAccount selectEnterpriseAccountByEnterpriseName(
            String enterpriseName, Long enterpriseAccountId){
        if (enterpriseAccountId == null){
            return selectOneByQuery(QueryWrapper.create()
                    .eq(LindiEnterpriseAccount::getEnterpriseName, enterpriseName));
        } else{
            return selectOneByQuery(QueryWrapper.create()
                    .eq(LindiEnterpriseAccount::getEnterpriseName, enterpriseName)
                    .ne(LindiEnterpriseAccount::getEnterpriseAccountId, enterpriseAccountId));
        }
    }

    /**
     * 根据企业手机号查询企业用户信息
     *
     * @param enterpriseMobile    企业手机号
     * @param enterpriseAccountId 企业账户ID
     * @return 企业用户信息
     */
    default LindiEnterpriseAccount selectEnterpriseAccountByEnterpriseMobile(
            String enterpriseMobile, Long enterpriseAccountId){
        if (enterpriseAccountId == null){
            return selectOneByQuery(QueryWrapper.create()
                    .eq(LindiEnterpriseAccount::getEnterpriseMobile, enterpriseMobile));
        } else{
            return selectOneByQuery(QueryWrapper.create()
                    .eq(LindiEnterpriseAccount::getEnterpriseMobile, enterpriseMobile)
                    .ne(LindiEnterpriseAccount::getEnterpriseAccountId, enterpriseAccountId));
        }
    }

    /**
     * 根据企业账户ID查询企业用户信息
     *
     * @param enterpriseAccountId 企业账户ID
     * @return 企业用户信息
     */
    default LindiEnterpriseAccount selectEnterpriseAccountByEnterpriseAccountId(
            Long enterpriseAccountId){
        return selectOneByQuery(QueryWrapper.create()
                .eq(LindiEnterpriseAccount::getEnterpriseAccountId
                        , enterpriseAccountId));
    }

    /**
     * 根据企业账户ID删除企业用户信息
     *
     * @param enterpriseAccountId 企业账户ID
     */
    default void deleteEnterpriseAccountByEnterpriseAccountId(
            Long enterpriseAccountId){
        deleteByQuery(QueryWrapper.create()
                .eq(LindiEnterpriseAccount::getEnterpriseAccountId
                        , enterpriseAccountId));
    }

    /**
     * 根据企业账户ID修改企业用户信息
     *
     * @param lindiEnterpriseAccount 企业用户信息
     */
    default void updateEnterpriseAccountByEnterpriseAccountId(
            LindiEnterpriseAccount lindiEnterpriseAccount){
        updateByQuery(lindiEnterpriseAccount, QueryWrapper.create()
                .eq(LindiEnterpriseAccount::getEnterpriseAccountId
                        , lindiEnterpriseAccount.getEnterpriseAccountId()));
    }

    /**
     * 分页查询企业用户信息
     *
     * @param queryVO 查询条件
     * @return 分页查询结果
     */
    default Page<LindiEnterpriseAccount> selectPageEnterpriseAccountList(
            LindiEnterpriseAccountQueryVO queryVO){
        return paginate(queryVO.getPageNum(), queryVO.getPageSize(),
                QueryWrapper.create()
                        .eq(LindiEnterpriseAccount::getStatus
                                , queryVO.getStatus())
                        .like(LindiEnterpriseAccount::getEnterpriseName
                                , queryVO.getEnterpriseName())
                        .like(LindiEnterpriseAccount::getEnterpriseMobile
                                , queryVO.getEnterpriseMobile())
        );
    }

    /**
     * 查询企业账号列表信息
     *
     * @return 企业账号列表
     */
    default List<LindiEnterpriseAccount> selectEnterpriseAccountList(){
        return selectListByQuery(QueryWrapper.create()
                .select(LindiEnterpriseAccount::getEnterpriseName,
                        LindiEnterpriseAccount::getEnterpriseAccountId));
    }
    
    /**
     * 根据企业手机号查询企业用户信息（用于登录验证）
     *
     * @param mobile 企业手机号
     * @return 企业用户信息
     */
    default LindiEnterpriseAccount selectEnterpriseAccountByMobile(String mobile) {
        return selectOneByQuery(QueryWrapper.create()
                .eq(LindiEnterpriseAccount::getEnterpriseMobile, mobile));
    }
}
